Jak Terraform pomaga Cloud DevOpsom w pracy z chmurą
05.06.2023 | Łukasz Kałmuk
Wstęp
W obecnych czasach vendorzy chmurowi udostępniają różne metody zarzadzania ich rozwiązaniami, jak zarządzanie za pomocą konsoli webowej, CLI lub modułów mobile. Jeśli jednak za dane rozwiązanie odpowiedzialny staje się cały zespół, proces tworzenia zasobów staje się powtarzalny. Gdy do procesu zarzadzania zasobami chmurowymi chcemy „zaprzęgnąć” narzędzia CICD lub wykorzystujemy kilka chmur jednocześnie, z pomocą przychodzi nam narzędzie Terraform.
Terraform
Terafform jest narzędziem typu open source. Występuje także płatna, cloudowa wersja Terraform Enterprise, która pozwala na definicję infrastruktury, modułów IaaS/PaaS/SaaS jak i procesu zarzadzania tożsamością w formie prostego kodu źródłowego. Następnie daną infrastrukturę zdefiniowaną w postaci kodu, za pomocą dostępnych providerów rozwiązań chmurowych jak: GCP, Azure, AWS możemy tworzyć, zmieniać lub usuwać. Jeśli zdecydujemy się na zarzadzanie zasobami za pomocą kodów źródłowych, zyskujemy benefity, które na pierwszy rzut oka nie są aż tak widoczne:
- podzielenie odpowiedzialności lub przekazanie procesu zarządzania infrastruktura do zespołów developerskich bez potrzeby utrzymywania centralnego zespołu odpowiedzialnego za infrastrukturę;
- zwiększenie szybkości dostarczania zasobów poprzez zastosowanie automatyzacji procesów;
- przed procesem wdrożenia zmian w infrastrukturze mamy możliwość wykonania testów czy aby na pewno dane zmiany są pożądane, czy wszystkie wykorzystywane zmienne mamy poprawnie zdefiniowane lub sprawdzić poziom bezpieczeństwa kodu za pomocą np. zewnętrznych narzędzi jak checkov;
- poprzez definiowanie zasobów w formie kodu źródłowego całość rozwiązania możemy traktować jako dokumentację projektową, którą tak niechętnie tworzą administratorzy;
Źródło: opracowanie własne
Kilka komend w terraform na początek pracy…
Po zainstalowaniu samego narzędzia, zdefiniowaniu naszej infrastruktury w formie kodu źródłowego możemy przystąpić do pierwszej implementacji za pomocą kilku podstawowych komend:
Terraform init
Źródło: opracowanie własne
Polecenie to spowoduje walidację kodu źródłowego w poszukiwaniu błędów definicji, pobranie kodów źródłowych wykorzystywanych modułów jak też danych i kodów użytego providera chmurowego. Kolejnym krokiem jest wykonanie polecenia:
Terraform plan
Źródło: opracowanie własne
Polecenie pozwala nam sprawdzić jakie zostaną dokładnie wprowadzone zmiany do środowiska przed finalnym procesem implementacji. Wszystkie zasoby podas planu oznaczone znakiem +zostaną dodane do zasobów, oznaczone znakiem – usunięte, a oznaczone znakiem ~ zmienione podczas wykonywania kolejnego polecenia jakim jest:
Terraform apply
Terraform apply implementuje wszystkie zmiany które zostały przedstawione podczas polecenia terraform plan.
Oczywiście sam terraform posiada bardzo dużą paletę przełączników, pozwalających na zarzadzanie zasobami lub wspomagające dane procesy dlatego każdego zachęcam do dokumentacji producenta znajdującej się pod tym linkiem.
Jak Terraform ułatwia pracę w ING
Dzięki swojej prostej konstrukcji, możliwości instalacji w środowisku CICD w ING wykorzystujemy Terraforma przez pryzmat zarzadzania wszystkimi typami środowisk w rozwiązaniach chmurowych. Dzięki wykorzystaniu Azure repos, gdzie zgodnie z procesami zarządzamy naszymi kodami źródłowymi oraz Azure pipelines, gdzie zautomatyzowaliśmy procesy provisioningu poprzez wykorzystanie stages dla każdego z głównym modułów środowisk, w pełni cieszymy się i ulepszamy bezobsługowe instalacje, a zaoszczędzony czas przeznaczamy na poznawanie nowych obszarów chmurowych lub tworzenie własnych providerów oraz integracji, tak aby poszerzać obszary bezobsługowej wymiany danych między systemami kooperującymi.
Źródło: opracowanie własne
Podsumowanie
Podsumowując, terraform to naprawdę ciekawe i uniwersalne narzędzie posiadające potężną bazę gotowych providerów, gdzie poprzez brak skomplikowania możliwy jest do wykorzystania zarówno w małych projektach, jak i wielkich, globalnych korporacjach pokrywających całą infrastrukturę chmurową bądź wirtualną. Warto jednak poznać w pełni możliwości języka, jego definicje zmiennych, użycia pętli jak i modułów co powinno się przełożyć na efektywny kod.